<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- <%@ include file="./WEB-INF/jsp/layout/common.jsp"%> --%><!-- 相对路径写法 -->
<%@ include file="/WEB-INF/jsp/layout/common.jsp"%><!-- 绝对路径写法 -->
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- <meta http-equiv="refresh" content="3;url=webapp.jsp"> -->
<!-- content第一个参数为跳转前等待时间单位秒，第二个参数为跳转页面，不能指向WEB-INF目录下的文件 -->
<title>转发、重定向、引入</title>
<script src="js/jquery-1.10.2.js"></script><!-- 设定base后，不需要${pageContext.request.contextPath} -->
<script type="text/javascript">
$(function (){
	//location.href = "webapp.jsp";/* 重定向，不能指向WEB-INF目录下的文件 */
})
</script>
</head>
<body>
<%-- 	<%
		request.getRequestDispatcher("./WEB-INF/jsp/login/login.jsp").forward(request,response);
	 %> --%>
<%-- 	<%
		request.setAttribute("indexParam", "indexParam");
		request.getRequestDispatcher("/WEB-INF/jsp/login/login.jsp").forward(request,response);
		/* 这里的跟Controller是一致的，“/WEB-INF/jsp/”和“.jsp” 看做前缀和后缀，剩下“login/login” */
	 %> --%>
<%-- 	<%
		request.getRequestDispatcher("WEB-INF/jsp/login/login.jsp").forward(request,response);
	 %> --%>
<%-- 	 <%
	 	response.sendRedirect("./webapp.jsp");/* 重新定向不能指向WEB-INF目录下的文件 */
	 %> --%>
<%-- 	 <%
	 	response.sendRedirect("webapp.jsp");
	 %> --%>
<%-- 	 <%
	 	response.sendRedirect("/webapp.jsp");//这样会缺少上下文，为什么转发不会缺少？
	 %> --%>
	 
	 
	 <pre>
	请求转发：
	
	&lt;% request.getRequestDispatcher("/WEB-INF/jsp/login/login.jsp").forward(request,response); %&gt;
	前后页面共享一个request，在服务器端运行，对于浏览器来说是“透明的” ; 
	可以用 request.setAttribute("indexParam", "indexParam"); 传递参数
	跟Controller非常相似，“/WEB-INF/jsp/”和“.jsp” 看做前缀和后缀，剩下“login/login” 
	Controller底层应该就是用的转发
	
	
	页面重定向有多种方式：
	
	1.&lt;meta http-equiv="refresh" content="3;url=webapp.jsp"&gt;
	2.$(function (){location.href = "webapp.jsp";})
	3.&lt;% response.sendRedirect("webapp.jsp"); %&gt;
	
	重定向，是浏览器重新请求新的页面，前后页面不是一个request，不能指向WEB-INF目录下的文件
	
	
	引入：
	
	&lt;% @include file=""%&gt;
	编译期间就将file属性所指定的程序内容嵌入，生成一个class文件；include不能不需带参数，本就是一个页面,同一个request对象,常用
	
	&lt;jsp:include page=""&gt;
	并非编译期间嵌入，在客户端请求时才会被动态的载入，page内容是单独的class文件，可以带参数，不同的request对象，不常用
	
	&lt;%@ include file="./WEB-INF/jsp/layout/common.jsp"%&gt;相对路径写法
	&lt;%@ include file="/WEB-INF/jsp/layout/common.jsp"%&gt;绝对路径写法,常用
	
	"/webapp.jsp" 这样的路径只有服务器内部有效，如@include、转发；外部无效，重定向
	
	详细内容请看本页源码
	</pre>
</body>
</html>
